package com.thread.waitnotify;

//产品
public class Product {

	final int MAX_PRODUCT = 5;
	final int MIN_PRODUCT = 1;
	//当前商品数量
	int product = 4;

	/**
	 * 生产者生产出来的产品交给店员
	 */
	synchronized public void produce() {
		System.out.println("produce" + this.product);
		if (this.product >= MAX_PRODUCT) {
			try {
				wait();//这会会释放锁
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			return;
		}
		this.product++;
		System.out.println("生产者生产第" + this.product + "个产品.");
		notifyAll(); // 通知等待区的消费者可以取出产品了
	}

	/**
	 * 消费者从店员取产品
	 */
	synchronized public void consume() {
		System.out.println("consume" + this.product);
		if (this.product <= MIN_PRODUCT) {
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			return;
		}
		System.out.println("消费者取走了第" + this.product + "个产品.");
		this.product--;
		notifyAll(); // 通知等待去的生产者可以生产产品了
	}

}
